package Q299;

/**
 * 猜数字游戏
 * 你在和朋友一起玩 猜数字（Bulls and Cows）游戏，该游戏规则如下：
 *
 * 写出一个秘密数字，并请朋友猜这个数字是多少。朋友每猜测一次，你就会给他一个包含下述信息的提示：
 *
 * 猜测数字中有多少位属于数字和确切位置都猜对了（称为 "Bulls", 公牛），
 * 有多少位属于数字猜对了但是位置不对（称为 "Cows", 奶牛）。也就是说，这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
 * 给你一个秘密数字secret 和朋友猜测的数字guess ，请你返回对朋友这次猜测的提示。
 *
 * 提示的格式为 "xAyB" ，x 是公牛个数， y 是奶牛个数，A 表示公牛，B表示奶牛。
 * @author 23737
 * @time 2021.11.8
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(new Solution().getHint("1254", "1234"));
    }
}

class Solution {
    public String getHint(String secret, String guess) {
        StringBuilder sb = new StringBuilder();
        int a = 0, b = 0;
        int[] s = new int[10];
        int[] g = new int[10];
        //使用两个数组来分别记录秘密数字和猜测数字中每个数字出现的次数
        for (int i = 0; i < secret.length(); i++) {
            s[secret.charAt(i) - '0']++;
            g[guess.charAt(i) - '0']++;
            //这里用来记录”公牛“的个数
            a += secret.charAt(i) == guess.charAt(i) ? 1 : 0;
        }
        //这里使用一个for循环用来记录母牛的数字
        for (int i = 0; i < s.length; i++)
            b += Math.min(s[i], g[i]);

        //这里需要注意一点，b的值是包含了公牛和母牛的值的，所以这里还是要把公牛的值减了
        return sb.append(a).append("A").append(b - a).append("B").toString();
    }
}

